from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# 数据库连接URL，格式为：数据库类型+驱动://用户名:密码@主机:端口/数据库名?字符集参数
# 这里使用MySQL数据库，驱动为pymysql，用户名为root，密码123456，数据库名为a0804
SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:123456@localhost:3306/a0804?charset=utf8mb4"

# 数据库连接池大小，设置为20表示同时最多维持20个数据库连接
POOL_SIZE = 20

# 连接回收时间（秒），设置为3600秒（1小时）
# 用于避免数据库连接长时间闲置被数据库服务端主动关闭导致的连接失效问题
POOL_RECYCLE = 3600

# 创建数据库引擎，负责管理数据库连接
# 参数包括连接URL、连接池大小、连接回收时间
engine = create_engine(
    SQLALCHEMY_DATABASE_URL,
    pool_size=POOL_SIZE,
    pool_recycle=POOL_RECYCLE
)

# 创建会话工厂（sessionmaker），用于生成数据库会话对象
# autocommit=False：关闭自动提交，需手动调用commit()提交事务
# autoflush=False：关闭自动刷新，避免未提交的修改被自动同步到数据库
# bind=engine：绑定前面创建的数据库引擎
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# 创建声明式基类（Base），所有数据模型类需继承该类
# 用于定义数据库表结构，通过该基类可以实现ORM映射
Base = declarative_base()